package com.onetime.mall.trading.config;

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * 登录拦截器
 * 快捷键 ctrl + o
 *
 * @author Lenovo
 */
public class LoginBlocker implements HandlerInterceptor {
    /**
     * 返回当前的计算机时间，时间的表达格式为当前计算机时间和GMT时间(格林威治时间)1970年1月1号0时0分0秒所差的毫秒数。
     */
    private long startTimeMilliseconds = System.currentTimeMillis();
    long startTimeSeconds = startTimeMilliseconds / 1000;

    /**
     * 在业务处理器处理请求之前被调用。预处理，可以进行编码、安全控制、权限校验等处理；（主要）
     *
     * @param request
     * @param response
     * @param handler
     * @return
     */
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
        startTimeSeconds = System.currentTimeMillis() / 1000;
        /*return HandlerInterceptor.super.preHandle(request, response, handler);*/
        /*Spring的拦截器，在preHandle方法中获取request的请求体*/
       /* String url = request.getRequestURL().toString();
        String queryString = request.getQueryString();
        System.out.println("=================================");
        System.out.println("请求地址：" + url + "全部参数：" + queryString);
        System.out.println("=================================");*/
        return true;
    }

    /**
     * 在业务处理器处理请求执行完成后，生成视图之前执行。后处理（调用了Service并返回ModelAndView，但未进行页面渲染），有机会修改ModelAndView
     * 基本不怎么用
     *
     * @param request
     * @param response
     * @param handler
     * @param modelAndView
     * @throws Exception
     */
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        System.out.println("******************************************************");
        System.out.println("请求：" + request.getRequestURL().toString() + " 全部参数：" + request.getQueryString() + "，耗时" + (System.currentTimeMillis() - startTimeMilliseconds) / 1000 + "ms  " + format.format(new Date()));
        System.out.println("******************************************************");
    }

    /**
     * 在DispatcherServlet完全处理完请求后被调用，可用于清理资源等。返回处理（已经渲染了页面）
     * 基本用不到
     *
     * @param request
     * @param response
     * @param handler
     * @param ex
     * @throws Exception
     */
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        HandlerInterceptor.super.afterCompletion(request, response, handler, ex);
    }
}
